﻿using System;
using System.ServiceModel;
using System.Security.Permissions;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceContract
{
    /// <summary>
    /// ServiceContract Interface - IAjusteMercadoFuturo
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Ordens.Service.ServiceContract", SessionMode = SessionMode.Allowed)]
    public interface IAjusteMercadoFuturo
    {
        #region Membros

        /// <summary>
        /// Calcula ajuste de posição de mercado futuro
        /// </summary>
        /// <param name="request">Contrato de dados contendo a data do pregão</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AjustarPosicao")]
        [TransactionRequired]
        void AjustarPosicao(DataContract.Request.DataPregaoRequest request);

        /// <summary>
        /// Altera um registro de ajuste de mercado futuro
        /// </summary>
        /// <param name="request">Contrato de dados contendo os valores a serem alterados</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarAjusteMercadoFuturo")]
        void AlterarAjusteMercadoFuturo(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.AjusteMercadoFuturoRequest request);

        /// <summary>
        /// Consulta registros de ajustes de mercado futuro
        /// </summary>
        /// <param name="request">Contrato de dados contendo o código do negócio(opcional) e a data do pregão</param>
        /// <returns>Lista de contratos de dados de ajustes de mercado futuro</returns>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarAjustesMercadoFuturo")]
        List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.AjusteMercadoFuturoResponse> ConsultarAjustesMercadoFuturo(DataContract.Request.FiltroAjusteMercadoFuturoRequest request);

        /// <summary>
        /// Exclui um registro de ajuste de mercado futuro
        /// </summary>
        /// <param name="request">Contrato de dados(filtro) contendo o código do negócio, data do pregão e o ano do pregão</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirAjusteMercadoFuturo")]
        void ExcluirAjusteMercadoFuturo(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.FiltroAjusteMercadoFuturoRequest request);

        /// <summary>
        /// Executa as transações de Inserção, Exclusão e Alteração de registros de ajuste de mercado futuro
        /// </summary>
        /// <param name="listaInclusao">Lista de contratos de dados para inclusão</param>
        /// <param name="listaAlteracao">Lista de contratos de dados para alteração</param>
        /// <param name="listaExclusao">Lista de contratos de dados para exclusão</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExecutarTransacoes")]
        [TransactionRequired]
        void ExecutarTransacoes(List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.AjusteMercadoFuturoRequest> listaInclusao, List<DataContract.Request.AjusteMercadoFuturoRequest> listaAlteracao, List<DataContract.Request.FiltroAjusteMercadoFuturoRequest> listaExclusao);

        /// <summary>
        /// Inclui um registro de ajuste de mercado futuro
        /// </summary>
        /// <param name="request">Contrato de dados de ajuste de mercado futuro</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirAjusteMercadoFuturo")]
        void IncluirAjusteMercadoFuturo(Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request.AjusteMercadoFuturoRequest request);

        #endregion
    }
}